// #include "temp_msg.h"

// #include "s_user_ds18b20.h"
// #include "s_ds18b20.h"
// #include "s_freeRTOS_event.h"
// #include "s_para.h"
// #include "s_aht10.h"
// #include "s_common_message.h"
// #include "s_common_loopClock.h"

// #include <stdio.h>
// #include <string.h>

// #include "usb_device.h"

// #include "h_timer_pwm.h"

// extern s_freeRTOS_event_t user_event_t;

// float temp[3] = {25.0, 25.0, 25.0};
// float air_temp = 25.0;
// float air_humidity = 50.0;

// float t, h;

// unsigned char cdc_send_endbale = 0U;

// extern UART_HandleTypeDef huart1;

// #define FAN_MAX_SPEED                                                   85
// #define FAN_MIN_SPEED                                                   5

// #define TEMP_MSG_SET_T0_THRESHOLD                                       "st0"
// #define TEMP_MSG_SET_T1_THRESHOLD                                       "st1"
// #define TEMP_MSG_SET_T2_THRESHOLD                                       "st2"
// #define TEMP_MSG_SET_UPLOAd_SPEED                                       "sup"

// static const unsigned char temp_msg_error[] = "msg:error";
// static const unsigned char temp_msg_ok[] = "msg:ok";

// #define SPLIT_CHAR                                                      ':'

// static void temp_msg_limit_temp(float *t)
// {
//     if(*t > 80) {
//         *t = 80;
//     } else if(*t < -40) {
//         *t = -40;
//     }
// }

// static void temp_msg_limit_humi(float *h)
// {
//     if(*h > 100) {
//         *h = 100;
//     } else if(*h < 0) {
//         *h = 0;
//     }
// }

// static int user_atoi(const char *str, unsigned short str_len)
// {
//     int num = 0, i, times = 1, len = 0, positive = 1;
//     char *data = (char *)str;

//     if(*data == '-') {
//         positive = -1;
//         data++;
//     }

//     while((*data != '\0') && (str_len-- > 0)) {
//         if(*data > '9' || *data  < '0') {
//             break;
//         }
//         len++;
//         data++;
//     }

//     data = (char *)str + len - 1;
//     if(positive == -1) {
//         data++;
//     }

//     for(i = len; i > 0; i--) {
//         num += (*data - '0') * times;
//         times *= 10;
//         data--;
//     }

//     num *= positive;

//     return num;
// }

// static void temp_msg_send(const unsigned char *data, unsigned short len)
// {
//     // printf("len:%d\r\n", len);
//     if(1 == cdc_send_endbale)
//     {
//         CDC_Transmit_FS(data, len);
//     }
//     // printf("%.*s\r\n", len, data);
//     HAL_UART_Transmit(&huart1 , data, len, 0xFFFF);
// }

// static signed char temp_msg_get_threshold(const unsigned char *data, unsigned short len, int *thrs)
// {
//     unsigned short comma_index[2];
//     unsigned char comma_num = 0U;
//     unsigned char *t_data = data;
//     unsigned short i = 0;

//     if(SPLIT_CHAR == data[0])
//     {
//         while((i < len) && (*t_data != '\0'))
//         {
//             if(*t_data == ',')
//             {
//                 comma_index[comma_num] = i;
//                 comma_num++;
//                 if(comma_num >= 2)
//                 {
//                     break;
//                 }
//             }
//             i++;
//             t_data++;

//         }
//         if(i >= len)
//         {
//             return (-2);
//         }

//         thrs[0] = user_atoi(&data[1], len - 1);
//         thrs[1] = user_atoi(&data[comma_index[0] + 1], len - (comma_index[0] + 1));
//         thrs[2] = user_atoi(&data[comma_index[1] + 1], len - (comma_index[1] + 1));

//         return 0;
//     }
//     else
//     {
//         return (-1);
//     }
// }

// static void temp_msg_set_t0_threshold(const unsigned char *data, unsigned short len)
// {
//     // printf("t0\r\n");
//     int thrs[3];

//     if(temp_msg_get_threshold(data, len, thrs) != 0)
//     {
//         temp_msg_send(temp_msg_error, strlen(temp_msg_error) + 1);
//     }
//     else
//     {
//         // printf("%d, %d, %d\r\n\n", thrs[0], thrs[1], thrs[2]);
//         s_para_set_t0_max(thrs[1]);
//         s_para_set_t0_min(thrs[2]);
//         s_para_set_t0_enable(thrs[0]);

//         temp_msg_send(temp_msg_ok, strlen(temp_msg_ok) + 1);
//     }
    
// }

// static void temp_msg_set_t1_threshold(const unsigned char *data, unsigned short len)
// {
//     // printf("t1\r\n");
//     int thrs[3];

//     if(temp_msg_get_threshold(data, len, thrs) != 0)
//     {
//         temp_msg_send(temp_msg_error, strlen(temp_msg_error) + 1);
//     }
//     else
//     {
//         // printf("%d, %d, %d\r\n\n", thrs[0], thrs[1], thrs[2]);
//         s_para_set_t1_max(thrs[1]);
//         s_para_set_t1_min(thrs[2]);
//         s_para_set_t1_enable(thrs[0]);

//         temp_msg_send(temp_msg_ok, strlen(temp_msg_ok) + 1);
//     }
// }

// static void temp_msg_set_t2_threshold(const unsigned char *data, unsigned short len)
// {
//     // printf("t2\r\n");
//     int thrs[3];

//     if(temp_msg_get_threshold(data, len, thrs) != 0)
//     {
//         temp_msg_send(temp_msg_error, strlen(temp_msg_error) + 1);
//     }
//     else
//     {
//         // printf("%d, %d, %d\r\n\n", thrs[0], thrs[1], thrs[2]);
//         s_para_set_t2_max(thrs[1]);
//         s_para_set_t2_min(thrs[2]);
//         s_para_set_t2_enable(thrs[0]);

//         temp_msg_send(temp_msg_ok, strlen(temp_msg_ok) + 1);
//     }
// }

// static void temp_msg_set_uploadSpeed(const unsigned char *data, unsigned short len)
// {
//     int time;
//     if(SPLIT_CHAR == data[0])
//     {
//         time = user_atoi(&data[1], len - 1);
//         s_para_set_uploadTime(time);
//         temp_msg_send(temp_msg_ok, strlen(temp_msg_ok) + 1);
//         s_common_loopClock_specialEvt_edit_time(s_common_loopClock_uploadData_type, s_para_get_uploadTime());
//     }
//     else
//     {
//         temp_msg_send(temp_msg_error, strlen(temp_msg_error) + 1);
//     }
// }

// static void temp_msg_uploadmsg_callback(s_common_loopClock_type type)
// {
//     temp_msg_upload();
//     s_common_loopClock_specialEvt_start(s_common_loopClock_uploadData_type);
// }

// static int temo_msg_get_fan_speed(int temp, int max, int min)
// {
//     float k, b;
//     int speed;
//     if(max == min)
//     {
//         if(temp >= max)
//         {
//             return FAN_MAX_SPEED;
//         }
//         else
//         {
//             return 0;
//         }
//     }
//     else
//     {
//         if(temp > max)
//         {
//             return FAN_MAX_SPEED;
//         }
//         else if(temp < min)
//         {
//             return 0;
//         }
//         else // y = kx + b
//         {
//             k = FAN_MAX_SPEED * 1.0 / (max - min);
//             b = FAN_MIN_SPEED - (k * min) * 1.0;
//             speed = (int)(temp * k + b);
//             if(speed > FAN_MAX_SPEED) {
//                 speed = FAN_MAX_SPEED;
//             }
//             else if(speed < FAN_MIN_SPEED)
//             {
//                 speed = 0;
//             }
//             return speed;
//         }
//     }
// }

// static void temp_msg_fan_control(int t0, int t1, int t2)
// {
//     int t0_fan = 0, t1_fan = 0, t2_fan = 0;

//     if(s_para_get_t0_enable() != 0)
//     {
//         t0_fan = temo_msg_get_fan_speed(t0, s_para_get_t0_max(), s_para_get_t0_min());
//     }
//     if(s_para_get_t1_enable() != 0)
//     {
//         t1_fan = temo_msg_get_fan_speed(t1, s_para_get_t1_max(), s_para_get_t1_min());
//     }
//     if(s_para_get_t2_enable() != 0)
//     {
//         t2_fan = temo_msg_get_fan_speed(t2, s_para_get_t2_max(), s_para_get_t2_min());
//     }

//     h_timer_pwm_change_channel_duty(pwm_channel_1, t0_fan);
//     h_timer_pwm_change_channel_duty(pwm_channel_2, t1_fan);
//     h_timer_pwm_change_channel_duty(pwm_channel_3, t2_fan);

//     // printf("fan:%d, %d, %d\r\n", t0_fan, t1_fan, t2_fan);
// }

// void cdc_send_state_change(void)
// {
//     if(0U == cdc_send_endbale)
//     {
//         cdc_send_endbale = 1U;
//     }
//     else
//     {
//         cdc_send_endbale = 0U;
//     }
// }

// void temp_msg_init(void)
// {
//     s_common_message_init();
//     s_common_loopClock_init();

//     s_common_message_add(TEMP_MSG_SET_T0_THRESHOLD, STRLEN(TEMP_MSG_SET_T0_THRESHOLD), &temp_msg_set_t0_threshold);
//     s_common_message_add(TEMP_MSG_SET_T1_THRESHOLD, STRLEN(TEMP_MSG_SET_T1_THRESHOLD), &temp_msg_set_t1_threshold);
//     s_common_message_add(TEMP_MSG_SET_T2_THRESHOLD, STRLEN(TEMP_MSG_SET_T2_THRESHOLD), &temp_msg_set_t2_threshold);
//     s_common_message_add(TEMP_MSG_SET_UPLOAd_SPEED, STRLEN(TEMP_MSG_SET_UPLOAd_SPEED), &temp_msg_set_uploadSpeed);
    

//     s_common_loopClock_specialEvt_add(s_common_loopClock_uploadData_type, temp_msg_uploadmsg_callback, s_para_get_uploadTime());
//     // s_common_loopClock_specialEvt_add(s_common_loopClock_uploadData_type, temp_msg_uploadmsg_callback, 1);

//     // printf("t0max: %d\r\n", s_para_get_t0_max());
//     // printf("t0min: %d\r\n", s_para_get_t0_min());
//     // printf("t0enable: %d\r\n", s_para_get_t0_enable());

//     // printf("t1max: %d\r\n", s_para_get_t1_max());
//     // printf("t1min: %d\r\n", s_para_get_t1_min());
//     // printf("t1enable: %d\r\n", s_para_get_t1_enable());

//     // printf("t2max: %d\r\n", s_para_get_t2_max());
//     // printf("t2min: %d\r\n", s_para_get_t2_min());
//     // printf("t2enable: %d\r\n", s_para_get_t2_enable());
// }



// static unsigned char msgdata[128];

// void temp_msg_upload(void)
// {
//     // unsigned char msgdata[128];
//     memset(msgdata, 0, sizeof(msgdata));

//     s_ds18b20_1_get_temperature(&temp[0]);
//     s_ds18b20_2_get_temperature(&temp[1]);
//     s_ds18b20_3_get_temperature(&temp[2]);

//     S_AHT10_Get_Humidity_Temp(&h, &t);

//     temp_msg_limit_temp(&temp[0]);
//     temp_msg_limit_temp(&temp[1]);
//     temp_msg_limit_temp(&temp[2]);
//     temp_msg_limit_temp(&t);
//     temp_msg_limit_humi(&h);

//     // sprintf(msgdata, "data:t0:%d,t1:%d,t2:%d,at:%d,ah:%d\r\n\0", (int)(temp[0] * 100), (int)(temp[1] * 100), (int)(temp[2] * 100), (int)(t * 100), (int)(h * 100));

//     snprintf(msgdata, sizeof(msgdata), "data:t0:%d,t1:%d,t2:%d,at:%d,ah:%d\r\n\0", (int)(temp[0] * 100), (int)(temp[1] * 100), (int)(temp[2] * 100), (int)(t * 100), (int)(h * 100));

//     if(strlen(msgdata) < sizeof(msgdata)) {
//         temp_msg_send(msgdata, strlen(msgdata));
//     }
    

//     temp_msg_fan_control((int)(temp[0] * 100), (int)(temp[1] * 100), (int)(temp[2] * 100));

//     // if(h < 30)
//     // {
//     //     h = 0;
//     // }
//     // h = h * 1.5;
//     // if(h > 100)
//     // {
//     //     h = 90;
//     // }
//     // h_timer_pwm_change_channel_duty(pwm_channel_1, (int)h);

// }

// void ask_temp_msg_upload(void)
// {
//     s_freeRTOS_event_enqueue(&user_event_t, s_freeRTOS_event_dataUpload_evt, NULL, 0, 0);
// }